#include <iostream>
#include <string>
#include <regex>

int main()
{
    std::string s("this subject has a submarine as a subsequence");
    std::smatch m;
    std::regex e("\\b(sub)([^ ]*)"); // matches words beginning by "sub"

    std::cout << "Target sequence: " << s << std::endl;
    std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
    std::cout << "The following matches and submatches were found:" << std::endl;

    while (std::regex_search(s, m, e))
    {
        for (auto x : m)
            std::cout << x << " ";
        std::cout << std::endl;
        s = m.suffix().str();
    }
    s = "this subject has a submarine as a subsequence";
    std::cout << std::regex_replace(s, e, "pub-$2") << std::endl;
    return 0;
}